◆シェルを使いこなす

ここでは、Shell(シェル)のカスタマイズ方法と、便利な使用方法を説明していきたいと思います。

FreeBSDで主に使用される「tcsh」の使用方法とカスタマイズ方を説明していきます。

ちなみに、セキュアシェルであるsshは、ここでのシェルとは関係ありません。
それは説明を読んでいけば分かると思いますが…念のため。


◆Shell(シェル)とは

シェルとはシステム(カーネル)にアクセスするためにユーザーが使用するプログラムです。

対話的にコマンドを処理出来ることから、コマンドインタプリタとも呼ばれています。
シェルを使用して、簡単なプログラム(シェルスクリプト)を組むことも可能です。

このシェルは自分自身にほとんど機能は無いものの、
ユーザーの入力した命令(文字列)を解釈してシステム(カーネル)に伝える、
もっとも基本となるプログラムです。


UNIXにログインすると、ユーザー情報に書かれている設定に従って、
まず最初にシェルが読み込まれています。

いわばユーザーの手足となるプログラムであり、
これを使いこなすことは、すなわちUNIXを使いこなす事と同等の意味を持ってきます。


UNIXには、「sh」「csh」「tcsh」「bash」「zsh」等、様々なシェルが存在します。
そしてシステムに登録されている限り、ユーザーはどのシェルでも使用することが可能です。

MS-DOSやMS-Windowsで言うところの「COMMAND.COM」に当たるプログラムです。
Windows2000/XPでは「CMD」で起動可能です。

UNIXで使用されるシェルでもっとも古いのは「sh」と呼ばれるプログラムです。
これはシェルとして、必要最低限の機能しか持っていません。
(「cd」や「echo」、パイプ、リダイレクト、ワイルドカード、簡単なインタプリタ言語の機能は組み込まれてます)

この「sh」から、もっとユーザーが使いやすいように、様々な機能を追加した様々なシェルが開発されました。
(プロンプト変更、環境変数、ヒストリー機能、パス、コマンド補完、Alias(別名)…etc)

この中で今もっとも使用されているのが「tcsh」「bash」だと思います。
一番高機能なのは「zsh」とのもっぱらの定説ですが、高機能(ややこし)すぎて使われないようです…(汗)。


FreeBSDの場合は、一般ユーザーは「tcsh」を使用するのが一般的のようです。
rootに限り「csh」が推奨されています。

Linuxで一般的に使用されているのは「bash」というシェルです。
この「bash」はFreeBSDにはディフォルトで入っていないものの、
Linuxに慣れている方であれば、portsやpackagesから「bash」を導入する事も可能です。


なお、「tcsh」と「bash」のシェルの間では、必要最低限の機能以外(新機能)ではほとんど共通点はありません。
rootに使用している「csh」は、「tcsh」とほとんど同機能ですが、
rootのシェルをカスタマイズするのは推奨できないので、
使用方法に関しては「tcsh」と「csh」を、カスタマイズは「tcsh」のみ説明を行いたいと思います。


◆tcsh(csh)シェルの便利な使用方法

tcsh(csh)シェルを使用する上で、これだけは知っておいた方がいい、という便利な機能を説明します。


●ヒストリー機能

> history
こう入力すると、使用したコマンドの履歴が表示されます。
「> history | more」とすれば、一ページごとに見ることも可能です。

入力待ちの状態からカーソルキーの「↑」を押すと最新のコマンドから順に表示します。
「↓」で戻ることも可能です。

他にも、過去に「less」を使用してどんなファイルを見たのか確認したければ、
「> less 」と入力後に「↑」を押せば、過去に「less」を使用したコマンドが表示されます。
表示された状態でエンターを押せば、もう一度実行することが可能です。

なお、ディフォルトでは、ヒストリーの保存数は100です。


●コマンド補完機能&候補表示

これがtcsh(csh)シェルにおける、もっとも主要な機能だと言っても過言ではありません。
この使い方だけは、是非憶えておいてください。

コマンド補完とは、コマンドを入力する時に、
「TAB」キーを押すことによりコマンドを補完する
機能の事です。(ディレクトリを含めて)

しかし、複数の候補があった場合、補完は途中で止まってしまいます。
その時どんな候補があるのか、候補を表示するのに「Ctrl+D」を使用します。

これは説明するよりも実際の手順を説明した方が理解しやすいと思いますので、
「/usr/local/etc/rc.d/apache.sh start」の実行を例に挙げて説明したいとします。
Server# /u #「/u」を入力
Server# /u ←[TAB]キーを押す

Server# /usr/ ←補完される

Server# /usr/l #「l」を入力
Server# /usr/l ←[TAB]キーを押しても補完されない
Server# /usr/l ←[Ctrl+D]を押して候補を表示
lib/ libdata/ libexec/ local/ #頭文字が「l」の候補が表示

Server# /usr/lo #「o」を入力
Server# /usr/lo ←[TAB]キーを押す

Server# /usr/local/ ←他に候補が無いので補完

Server# /usr/local/e #「e」を入力
Server# /usr/local/e ←[TAB]キーを押しても補完されない
Server# /usr/local/e ←[Ctrl+D]を押して候補を表示
empty/ etc/ #頭文字が「e」の候補が表示

Server# /usr/local/et #「t」を入力
Server# /usr/local/et ←[TAB]キーを押す

Server# /usr/local/etc/ ←他に候補が無いので補完

Server# /usr/local/etc/r #「r」を入力
Server# /usr/local/etc/r ←[TAB]キーを押す

Server# /usr/local/etc/rc.d/ ←補完される

Server# /usr/local/etc/rc.d/a #「a」を入力
Server# /usr/local/etc/rc.d/a ←[TAB]キーを押す

Server# /usr/local/etc/rc.d/apache.sh ←補完される

Server# /usr/local/etc/rc.d/apache.sh start #引数を入力

細かく説明したために長くなってしまいましたが、
順に追っていけば、一体どうやっているか分かって貰えると思います。

見てみるとやたらと長いですが、慣れてくれば「l」を「lo」と、「e」を「et」と打って飛ばせますし、
最終的には2秒未満(プロなら1秒未満)で全ての入力を終わらせることが可能になってきます。

この補完機能の何がいいかといえば、たとえばApache のソース「apache_1.3.28.tar.gz」を解凍する時にも、
ソースのあるディレクトリに移動して「tar zxvf ap[TAB]キー」でファイル名が補完出来ますし、
この解凍されたディレクトリに移動する時にもいちいちすべてを入力しなくても、
「cd ap[TAB]キー」と押すだけで、「cd apache_1.3.28」と、ディレクトリ名が補完されるからです。

この補完機能はコマンドプロンプト上であれば、おおよそどこにでも使用出来ます。

これを使わないで、何が「tcsh(csh)」か!と言うほどなので、
是非、この強力なコマンド補完機能、候補表示を憶える…というか、身に叩き込んで下さい。


◆tcshシェルをカスタマイズ…「.cshrc」

カスタマイズする時に設定を書き込むファイルは「.cshrc」と言うファイルです。
これは「tcsh」でも「csh」でも同じファイルが使用されます。

このファイルはユーザーのホームディレクトリに必ず存在していて、
ログインした時に必ず読み込まれます。

つまり、自分のホームディレクトリの「.cshrc」を編集することにより、
自分専用にカスタマイズ可能なわけです。

一度このファイルを見てみましょう。
なお、不要なコメント部分は勝手に省き、日本語コメントを勝手に追加してあります。
#.cshrcファイル

#アリアス(別名)
alias h  history 25
alias j  jobs -l
alias la  ls -a
alias lf  ls -FA
alias ll  ls -lA

# A righteous umask
umask 22

#パス指定(途中で切れてるけど一行です)
set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

#環境変数
setenv EDITOR vi
setenv PAGER more
setenv BLOCKSIZE K

#プロンプト設定
if ($?prompt) then
  # An interactive shell -- set some stuff up
  set filec
  set history = 100
  set savehist = 100
  set mail = (/var/mail/$USER)
  if ( $?tcsh ) then
    bindkey "^W" backward-delete-word
    bindkey -k up history-search-backward
    bindkey -k down history-search-forward
  endif
endif
以上です。
tcsh(csh)でログインするたびに、このファイルを最初に読み込むわけですね。

このディフォルトの設定ファイルは「/usr/share/skel/dot.cshrc」にあります。
「adduser」やsysinstallでユーザーを作成した際、
この「/usr/share/skel/」から(dot)を取り除いたファイルが全てホームディレクトリにコピーされます。


なお、この「.cshrc」ファイルはログイン時にシェルが読み込んで、その後は一切読み込まないため、
いくらファイルを編集しても、再びログインするまで編集内容は反映されません。

すぐに設定内容を反映させたいのであれば、
> source ~/.cshrc
と実行します。

これは「~/」で自分のホームディレクトリにある「.cshrc」を読み込むように指定しており、
ややこしいのであれば「cd」で自分のホームディレクトリに移動後、「source .cshrc」でも結構です。

では、説明とカスタマイズを始めたいと思います。


●alias…コマンドに別名を付ける

「alias」という設定は、コマンドに別名を付けています。

初期設定に「alias la ls -a」とありますが、
これは「la」とコマンドを入力した際、「ls -a」と自動的に展開して実行してくれます。
同様に「ll」と入力した場合、「ls -lA」に展開されます。

実際に「la」と「ll」と実行してみて、その通りになることを確認してみてください。

よく使われるaliasとして、DOSに慣れてしまって「ls」の代わりに「dir」とついつい入力してしまう方は
「alias dir ls」と設定しておけば、dirでもlsと同等に動作するようになります…(汗)


●set path…パスを通すディレクトリを指定する

パスとは、あるプログラムを実行する際、
プログラムの置いてあるディレクトリから指定しなくても、
プログラム名さえ入力すれば、自動的にディレクトリを補完して実行してくれる機能です。

「ls」や「rm」「less」等のプログラムを普段意識せずに使用していますが、
これは全てパスが通っているお陰です。
実際には「ls」は「/bin/ls」に、「rm」は「/bin/rm」に、「less」は「/usr/bin/less」にあります。
全てパスが通っていることを確認してみてください。
なお、パスが通るのは、実行可能なファイルのみです

portsを使用してインストールした場合、
プログラムはほぼこのパスが通っているディレクトリにインストールされます。

インストール直後「rehash」と実行することがよくありますが、
インストールした直後は実際にパスを管理しているデータベースに反映していないため、
ここに指定されているディレクトリを全てチェックして、設定し直している事になります。
パスのチェックはログインすると必ず実行されますが、それでは面倒なので
「rehash」を使用して直接パス設定を修正しているわけです。

なので、ここに指定されていないディレクトリにインストールした場合、
いくら「rehash」を実行してもパスは通りません。



●setenv…環境変数

この「setenv」では、自分が使用する時の環境変数を指定しています。

たとえば「vipw」や「chsh」を実行した際、指定しないのに「vi」が起動したりしたと思います。
一部のプログラムでは、この環境変数「setenv EDITOR」を確認して、指定されているエディタを開きます。
そのため、自動的に「vi」エディタが起動しました。

「vi」を使用したくないという方は、ここを「setenv EDITOR ee」としておけば、
今後、環境変数の「EDITOR」からエディタを開くプログラムであれば、
すべて「ee」エディタに変更することが可能です。
変更後すぐに反映させたいのであれば「source ~/.cshrc」を忘れないように。

新しいプログラムをインストールした際、使用するにはこの環境変数「setenv」を
新たに指定しないといけない場合もあるので、憶えておいてください。


●prompt…プロンプト環境

この「prompt」では、プロンプト上でどんな機能が使用可能か、その設定を行っています。

「set filec」とありますが、これは上記で説明したファイル補完機能を実行可能にしています。
「set histry = 100」では、ログインしている間ヒストリーを保存する数を、
「set savehist = 100」では、ログアウト時に保存されるヒストリーの数を指定しています。
「set mail =/var/mail/$USER」では、定期的にメールスプールをチェックして、
新しいメールが届くと「You have new mail.」と表示して教えてくれます。


このプロンプト環境の中で一番興味があると思われるのは、
自分がログインした時に表示される「>」を変更する事が可能な「set prompt」だと思います。
しかしながら、ディフォルトでこの項目は存在していません。

これを新たに追加する時「# An interactive shell -- set some stuff up」と
コメントが書かれている次の行に追加するのが一般的だと思います。

次から、このプロンプト変更に関して詳しく説明していきます。

ただし、変な設定を行ってしまうと、シェルが起動しなくなると言う危険もあるため、
気を付けて編集してください。

コマンドラインで直接「> set prompt = "********"」と実行しても
ログアウトするまで反映されるため、これで動作を確認してから実際に書き込む方がいいかも知れません。


●set prompt…プロンプトを変える

なお、ここでは作業ユーザーを「admin」、ホスト名を「Server」として話を進めていきます。

プロンプトが「>」では寂しいですよね。では、まず自分の名前を表示させてみましょう!
> set prompt ="%n%# "
admin>

「%n」は自分のアカウント名を表示。
「%#」は、スーパーユーザー(root)ならば「#」、一般ユーザーならば「>」を表示するように指示しています。
最後に一つスペースがあるのは、ちゃんと意味がありますので注意してください。

とりあえず元に戻したい場合は「> set prompt="%# "」と憶えておいてください。


次は少し加えます。
> set prompt ="%n@%m%# "
admin@Server>

「@」はそのまま表示。「%m」がホスト名に展開されます。
ちなみに「%M」の大文字を指定すると、完全なドメイン名まで展開されます。うっとおしいだけですが(汗)。

次は、ちょっと趣向を変えます
> set prompt ="%/%# "
/home/admin>

「%/」は、現在ユーザーが作業しているディレクトリを表示させます。
これ、意外と重宝するんですよねー。

「%c」を使用すると、作業ディレクトリの一番下のディレクトリのみ表示されます。
ホームディレクトリでは「~」と表示してくれます。
これは逆に分かりづらい気がするので、緋色は使用してません。


次に時間を表示させてみましょう。
> set prompt ="%t%# "
11:28pm>

> set prompt ="%T%# "
23:28>

小文字で「%t」は「am/pm」で表示
大文字で「%T」は24時間表示
で現在の時刻を表示してくれます。

> set prompt="%p%# "
11:24:08pm>

> set prompt="%P%# "
23:24:19>

小文字で「%p」は「am/pm」で時:分:秒の表示
大文字で「%P」は24時間表示
で現在の時刻を時:分:秒表示をしてくれます。

次は少し複合技です。
> set prompt="[ %d %w %D %T %Y ]%# "
[ Mon Aug 11 23:28 2003 ]>

[](カッコ)マークはそのまま展開されます。
「%d」は曜日、「%w」は月、「%D」は日、「%T」は24時間の時間、「%Y」は年です。
なお、「%W」では数字で月を、「%y」では年の下2桁が表示されます。

最後は一気に説明しましたが、こういった変数が使用可能です。
%で始まらない文字は、基本的にそのまま展開されます。

これらを組み合わせることで、様々なプロンプトが表示可能です。
しかし、逆にこれだけあると、どれを使用したらいいのか迷ってしまいますが…(汗).

使用が決まったのであれば、その「set prompt = "*******"」を自分の「.cshrc」に書き込んで、
最後に「source ~/.cshrc」として読み込ませましょう。

これでプロンプトの設定は完了です。

緋色は「set prompt="%n[%T] %# "」を使用してます…作業してると時間をよく忘れるもので(汗)。



[一つ上に戻る]

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!